iT邦幫忙

2023 iThome 鐵人賽

DAY 12
1

幸福的回憶是追求幸福的天敵

資本主義社會本質上是一場競爭資源的遊戲,但過度追求物質或權力的行為就像是金手銬,會使我們執著並陷入無止境的追逐。

人們往往不願意放棄那些投入許多資源但實際上沒有價值的物品,當擁有過多物品時其實並沒有更快樂,卻反而因為需要花更多時間和精力來維護而感到焦慮、壓力和混亂,想想汽車的折舊和保養,就是擁有物品所付出的代價與成本。

從狀態機的角度看,一直停在追求的狀態就永遠無法達到滿足,當我們停止執著反而更容易獲得內在的平靜和滿足感,因此放手成為一種更有智慧的選擇。

會不會放手,其實才是擁有

回到擁有物品所付出的代價,軟體開發上常見需要考量的成本包含

  • 流程成本: 目標是減少流程,每多一道流程就增加出錯的機率
  • 理解成本: 目標是可讀性高的程式碼
  • 修改成本: 目標是可維護性高的程式碼
  • 執行成本: 目標是降低時間與空間複雜度
  • 測試成本: 目標是增加自動化的比例,降低人工
  • 技術成本: 目標是減少專案的入門門檻

買房必須在預算和空間的考量下追求最大的舒適和便利,軟體開發同樣需要在有限的資源下完成工作,在限制之中追求最佳解,資深的工程師在軟體開發過程中則是要注意開發上的資源限制和成本控制,協助開發團隊在成本與產出之間找到平衡,確保有足夠的資源來完成專案。

流程成本

首先,每個確認清單或標準作業流程背後都隱含著一種注意力成本,光是要配合各種獨特的 SOP 就已經先花掉大半注意力。

另外在大型企業中,重要決策需要多個部門之間的協調和確認,常常附帶著隱形決策成本,因為我們難以明確了解決策的真正來源和原因,所以無法知道指揮官的意圖,最終就只能在上戰場時遇到問題又回來確認是否正確合規。

額外一提,對某些公司也需要遵守政府法規,例如資料必須符合資安規範不能放上雲端,不得不去增加額外開發的複雜性和成本,以確保資料和系統的安全性。

理解成本 (可讀性)

這只是要增加一點小功能,應該會很迅速完成,對吧?

沒錯,或許只需新增一行程式碼便可解決這問題,但因為程式碼的混亂,也可能花費了許多時間來理解,這就是理解成本。

隨著專案的擴大,需要閱讀的程式碼也相應增加,每次撰寫新的程式碼,就像建構一座高塔,隨著高度增加,也就變得較不敢輕易新增程式碼。

最終,整個專案可能會面臨難以輕鬆新增功能的情況,新增新功能所需的時間變得難以估計。

修改成本 (可維護性)

在那些需求持續變化的專案中,每當再一次配合新需求修改相同程式碼段落的成本通常都會增加。

如果能夠降低下次修改程式碼所需的時間或快速恢復到之前的版本,那麼就能有效提高生產力。

這就需要使用版本管理工具的良好習慣或採用可模組化的程式設計架構。

執行成本 (效能)

隨著資料量的增加,程式不再能在啟動的瞬間立即完成,而是需要等待機器進行運算。

有時候,即使只有一小部分程式碼存在問題,程式也可能一直運行甚至可能永遠無法完成,使得程式運行的時間難以預測,在這個階段需要開始注重程式的效能,並深入研究資料結構和演算法。

程式的執行需要消耗機器的運算和儲存資源,像是處理器等級、記憶體大小、硬碟空間、網路頻寬等等,做出一個解決方但需要 100 核心的處理器,就像是 ChatGPT 解決方案如果出現在十年前其實並不實際。

資源是有限的,通過時間複雜度和空間複雜度的初步估計,就能夠更好地了解執行程式所需的時間,並比較不同演算法之間的優劣。

測試成本 (可測試性)

隨著時間的推移,價值觀不斷變化,多種因素可能讓以前寫的程式碼變得不夠優秀。

每當幾個月後回顧程式碼,常常會有一種「這什麼糞 Code!」的感覺,於是又不得不重新撰寫,每次重新撰寫時,經常會修改先前的程式碼的一部分,每一行程式碼的更動都可能對任何功能造成不利影響,特別是在專案規模較大的情況下必須經常重新進行測試。

在這種情況下,測試的成本變得明顯,因此自動化測試變得不可或缺。

技術成本

有時候開發會受到開發團隊的規模和技術水平限制,有時可能就是只能找菜鳥,甚至是非本科系的員工,這時候就會在可用技術和工具上的有所限制,必須在現有已知的技術選型中作出選擇,而不一定是最理想的選擇。

大型、複雜的軟體系統需要更多的計劃和管理以應對複雜性,技術限制可能包括特定技術選型或平台的選擇,開發團隊需要在滿足專案需求的同時又可以快速解決技術挑戰。

如果資源有限或技術領域無法掌握,也可以考慮聘請外部專家或外包部分工作來填補差距,透過低成本的方式找到合適的解決方案,以達到更好的結果。


上一篇
我願意,付出所有來換一個時光機
下一篇
有什麼留在你我的心頭,那是什麼?
系列文
前端三分鐘 X 每天三分鐘的斷捨離,讓每一天都可以早點下班30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言